// Variables para el manejo de hojas
var hojaPrincipal = "Hoja 1";
var hojaUltimosValores = "Últimos Valores";
var hojaDatosUsuarios = "datos usuarios";

var ss = SpreadsheetApp.getActiveSpreadsheet();
var hoja = ss.getSheetByName(hojaPrincipal);
var hojaValores = ss.getSheetByName(hojaUltimosValores);
var hojaUsuarios = ss.getSheetByName(hojaDatosUsuarios);

function obtenerUltimosDatos() {

  crearHojaUltimosValores();

  var sensores = obtenerSensores(); // Generar dinámicamente la lista de sensores
  var ultimaFila = hoja.getLastRow(); // Última fila con datos
  var dataRange = hoja.getRange(2, 1, ultimaFila - 1, 6); // Desde columna A, abarcando 6 columnas (A a F)
  var data = dataRange.getValues(); // Obtener los datos como matriz

  // Procesar los datos y actualizar la información de los sensores
  for (var i = 0; i < data.length; i++) {
    var fecha = data[i][1];       // Columna B: fecha-hora
    var sensor = data[i][2];      // Columna C: nombre del sensor
    var humedad = data[i][3];     // Columna D: humedad
    var temperatura = data[i][4]; // Columna E: temperatura

    for (var j = 0; j < sensores.length; j++) {
      if (sensor === sensores[j].nombre && (sensores[j].ultimaFecha === null || fecha > sensores[j].ultimaFecha)) {
        sensores[j].ultimaFecha = fecha;
        sensores[j].ultimaHumedad = humedad;
        sensores[j].ultimaTemperatura = temperatura;

      }
    }
  }

  // Preparar los datos para exportar
  var valoresSensores = sensores.map(sensor => [
    sensor.nombre,           // Nombre del sensor
    sensor.ultimaFecha,      // Última fecha
    sensor.ultimaHumedad,    // Última humedad
    sensor.ultimaTemperatura,// Última temperatura
    sensor.ultimaPosicion    // Posición (pseudónimo)
  ]);

  // Definir el rango de destino y pegar los datos
  var primeraFila = 2; // Empieza en la fila 2 para respetar la cabecera
  var primeraColumna = 1; // Empieza en la primera columna
  var numFilas = valoresSensores.length;
  var numColumnas = valoresSensores[0].length;

  var rangoDestino = hojaValores.getRange(primeraFila, primeraColumna, numFilas, numColumnas);
  rangoDestino.setValues(valoresSensores);

  console.log(sensores);
  return sensores;
}


function crearHojaUltimosValores() {

  // se crea una variable para la hoja de ultimos valores, el código comprueba si la hoja ya existe, y si no la inserta.
  var hojaValores = ss.getSheetByName(hojaUltimosValores);
  if (!hojaValores) {
    ss.insertSheet(hojaUltimosValores);
    hojaValores = ss.getSheetByName(hojaUltimosValores);
  }

      // Cabecera
    // La creamos si no existe
    if(hojaValores.getRange('A1').isBlank()){
      var h_row2 = []; //contenedor para almacenar con push los nombres de las cabeceras
      //empujamos los datos al array vacío
      h_row2.push("Nombre");  
      h_row2.push("Fecha");
      h_row2.push("Humedad %");
      h_row2.push("Temperatura ºC");
      h_row2.push("Posición"); 

      // pegamos los datos en la primera fila
      hojaValores.getRange(1, 1, 1, h_row2.length).setValues([h_row2]);
    }

}


// Generar la lista de sensores dinámicamente desde la hoja "datos usuarios"
function obtenerSensores() {
  var datosUsuarios = hojaUsuarios.getDataRange().getValues();
  var sensores = [];
  
  for (var i = 1; i < datosUsuarios.length; i++) { // Saltamos la primera fila (cabecera)
    var nombre = datosUsuarios[i][0]; // Columna 1: Nombre del sensor
    var posicion = datosUsuarios[i][1]; // Columna 2: seudónimo
    if (nombre && posicion) { // Validamos que ambos existan
      sensores.push({ 
        nombre: nombre, 
        ultimaFecha: null, 
        ultimaHumedad: null, 
        ultimaTemperatura: null, 
        ultimaPosicion: posicion 
      });
    }
  }
  
  return sensores;
}
// esta es la función principal para obtener los ultimos valores. la que debemos ejecutar en activadores